﻿#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>

//人不管走到哪一步，都得找点乐子，好好的活下去，放弃不过是最简单的手段，如何更饱满的坚持才更艰深，就算失败，也要摆出豪迈的姿态

//自定义类型
//1，结构体
//2，联合体
//3，枚举


//联合体  union:所有成员公用同一块内存空间，所以联合体也叫共用体
//联合的成员是共用同一块内存空间的
//union un
//{
//	char c;
//	int i;
//};
//struct s
//{
//	char c;
//	int i;
//};
//int main()
//{
//	union un u = { 0 };
//	printf("%d\n", sizeof(u));
//	printf("%p\n", &u);
//	printf("%p\n", &(u.c));
//	printf("%p\n", &(u.i));
//
//	struct s s = { 0 };
//	printf("%p\n", &s);
//	printf("%p\n", &(s.c)); 
//	printf("%p\n", &(s.i));
//
//	return 0;
//}

//联合体修改一个值另一个值也会发生修改
//union un
//{
//	int i;
//	char c;
//};
//int main()
//{
//	union un u = { 0 };
//	u.i = 0x11223344;
//	u.c = 0x55;
//	printf("%x", u.i);
//	return 0;
//}

//写一个函数判断编译器的大小端

//int check_sys()
//{
//	union un
//	{
//		int i;
//		char c;
//	}u;
//	u.i = 1;
//	return u.c;
//}
//int main()
//{
//	int ret = check_sys();
//	if (ret == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//
//	return 0;
//}


//#include <stdio.h>
//union Un1
//{
//    char c[5];
//    int i;
//};
//union Un2
//{
//    short c[7];
//    int i;
//};
//int main()
//{
//    //下⾯输出的结果是什么？
//    printf("%d\n", sizeof(union Un1));
//    printf("%d\n", sizeof(union Un2));
//    return 0;
//}


//枚举  也叫一一列举
//把可能的值一一列举出来
//enum sex
//{
//	MALE,
//	FAMALE,
//	SECRET
//};
//
//enum color
//{
//	//三原色的可能取值：这些取值都是有值的，默认是从0开始，依次递增1，在声明枚举类型的时候也可以赋予初值
//	//这里是枚举常量
//	BLUE,
//	YELLOW = 5 ,
//	RED
//};
//
//int main()
//{
//	enum color color = BLUE;
//	//BLUE = 7 //错误，BLUS是枚举常量，常量值是不可以被修改的
//	printf("%d\n", BLUE);
//	printf("%d\n", YELLOW);
//	printf("%d\n", RED);
//
//	return 0;
//}
//
//
//
//计算器的实现
//void menu()
//{
//	printf("****************************\n");
//	printf("*******1.add  2.sub*********\n");
//	printf("*******3.div  4,mul*********\n");
//	printf("*******0.exit***************\n");
//	printf("****************************\n");
//
//}
//enum option
//{
//	exit,
//	add,
//	sub,
//	div,
//	mul
//};
//int main3()
//{
//	int input = 0;
//	do
//	{
//		printf("请选择:");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case add:
//			break;
//		case sub:
//			break;
//		case div:
//			break;
//		case mul:
//			break;
//		case exit:
//			break;
//		default:
//			break;
//		}
//	} while (input);
//	return 0;
//}

//struct s
//{
//	int i : 3;
//	int x : 4;
//};
//int main()
//{
//	错误使用
//	struct s s = { 0 };
//	printf("%d",&s.i);
//
//	正确的⽰范
//	int b = 0;
//	scanf("%d", &b);
//	s.i = b;
//
//	printf("%d",sizeof(struct s));
//	return 0;
//}


